package poo.mat;

public class Operazioni {

	public enum Operazione {
		PIU, MENO, PER, DIVISO;
		double opera(double x, double y) {// realizza l'operazione aritmetica
											// associata alla costante enumerata
			switch (this) {
			case PIU:
				return x + y;
			case MENO:
				return x - y;
			case PER:
				return x * y;
			case DIVISO:
				return x / y;
			}
			throw new RuntimeException("Operazione sconosciuta op: " + this);
		}// opera
	}// Operazione

	public enum Operazione2 {
		PIU("+") {
			double opera(double x, double y) {
				return x + y;
			}
		},
		MENO("-") {
			double opera(double x, double y) {
				return x - y;
			}
		},
		PER("*") {
			double opera(double x, double y) {
				return x * y;
			}
		},
		DIVISO("/") {
			double opera(double x, double y) {
				return x / y;
			}
		};
		private final String simbolo;

		Operazione2(String simbolo) {// costruttore
			this.simbolo = simbolo;
		}

		public String toString() {
			return simbolo;
		}

		abstract double opera(double x, double y);
	}//Operazione2
	
	public static void main(String[] args){
		double x = 15;
		double y = 5;
		for(Operazione op: Operazione.values()){
			System.out.printf("%f %s %f = %f%n",x,op,y,op.opera(x, y));
		} 
		System.out.println();
		
		for(Operazione2 op: Operazione2.values())
			System.out.printf("%f %s %f = %f%n",x,op,y,op.opera(x, y));
	}

}
